package com.zhixi.customAnnotations;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.List;

/**
 * 自定义状态校验器
 * 用于校验状态是否合法,泛型中第一个参数为注解，第二个参数为要校验的值的类型
 *
 * @author zhixi
 */
public class StatusValidator implements ConstraintValidator<Status, String> {

    /**
     * 状态值
     */
    private List<String> typeStatus;

    /**
     * 初始化方法，获取注解中的状态值
     *
     * @param constraintAnnotation 给定约束声明的注释实例
     */
    @Override
    public void initialize(Status constraintAnnotation) {
        typeStatus = Arrays.asList(constraintAnnotation.statusType());
        ConstraintValidator.super.initialize(constraintAnnotation);
    }

    /**
     * 校验状态值是否合法
     *
     * @param value                      要校验的状态值
     * @param constraintValidatorContext 约束验证上下文
     * @return true 合法，false 不合法
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        if (value != null) {
            return typeStatus.contains(value);
        }
        return true;
    }
}